 package com.odontosis.rel;

import java.awt.Color;
import java.awt.Point;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.lowagie.text.BadElementException;
import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.PdfWriter;

/**
 * 
 * @author Pablo
 * 
 */
public class Relatorio {
	
	private String tituloRelatorio;

	public Relatorio() {

//		Document doc = new Document();
//
//		try {
//
//			PdfWriter.getInstance(doc, new FileOutputStream("Exemplo01.pdf"));
//			doc.addAuthor("Pablo");
//			doc.addTitle("Titulo");
//			doc.addHeader("Cabeçalho1", "Cabeçalho2");
//
//			doc.open();
//			Table tabela = new Table(3, 3);
//			tabela.setBackgroundColor(new Color(100, 200, 124));
//
//			// 3 linhas e 3 colunas
//			tabela.setAutoFillEmptyCells(true);
//			tabela.addCell("NOME", new Point(0, 0));
//			tabela.addCell("ENDERECO", new Point(0, 1));
//			tabela.addCell("TELEFONE", new Point(0, 2));
//			tabela.addCell("Jose dos Santos", new Point(1, 0));
//			tabela.addCell("Rua Farancisca Rocha", new Point(1, 1));
//			tabela.addCell("8859-5555", new Point(1, 2));
//
//			doc.add(tabela);
//			doc.add(new Paragraph("Olá Mundo Novo"));
//			doc.add(new Paragraph("Olá Mundo Novo"));
//			doc.add(new Paragraph("Olá Mundo Novo"));
//
//		}
//
//		catch (DocumentException e) {
//			System.err.println(e.getMessage());
//
//		} catch (IOException e) {
//			System.err.println(e.getMessage());
//
//		}
//
//		doc.close();

	}

	public Relatorio(int a) {

	}

	public void gerarPdf(DocumentoBasico documentoBasico) {
		try {
			Document doc = documentoBasico.getDocument();
			PdfWriter.getInstance(doc, new FileOutputStream("Rel.pdf"));
			doc.addAuthor("Pablo");
			doc.addTitle("Titulo");
			doc.addHeader("Cabeçalho1", "Cabeçalho2");

			doc.close();
		} catch (Exception e) {
			// TODO: handle exception
		}

	}

	public void construirTabela(List<Object[]> lista, DocumentoBasico doc, float[] floats, String... colunas)
			throws Exception {
		// DocumentoBasico documento = new DocumentoBasico(Constantes.PDF,null);
//		Document doc = new Document();
//
//		PdfWriter.getInstance(doc, new FileOutputStream("Rel.pdf"));
		

		

		doc.adicionarElemento(new Paragraph(tituloRelatorio));

		int nColunas = 0;
		int nLinhas = 1;

		for (Object[] vetorObjetos : lista) {
			nLinhas++;
		}

		for (String string : colunas) {
			nColunas++;
		}
		// numero de colunas por numero de linhas
		Table tabela = new Table(nColunas, nLinhas);
		tabela.setBackgroundColor(new Color(255, 255, 255));
		tabela.setAutoFillEmptyCells(true);
		tabela.setBorder(2);
		tabela.setWidth(100);
		float[] a = floats;
		tabela.setWidths(a);

		int i = 0;
		int j = 0;
		for (String coluna : colunas) {
			//formatacao do texto
			Phrase frase = new Phrase(coluna, FontFactory.getFont(
					FontFactory.HELVETICA, 10, Font.BOLD));
			//altura da celula
			frase.setLeading(50);

			Cell cell = new Cell(frase);
			cell.setVerticalAlignment(Cell.ALIGN_TOP);
			cell.setHorizontalAlignment(Cell.ALIGN_CENTER);

			
			cell.setBackgroundColor(new Color(0, 250, 60));

			tabela.addCell(cell, new Point(i, j++));
		}

		for (Object[] vetorObjetos : lista) {
			i++;
			for (j = 0; j < nColunas; j++) {
				tabela.addCell(vetorObjetos[j].toString(), new Point(i, j));
			}
		}

		doc.adicionarElemento(tabela);
	}

	// public boolean addTitle (String title)
	// public boolean addSubject (String subject)
	// public boolean addKeywords (String keywords)
	// public boolean addAuthor (String author)
	// public boolean addCreator (String creator)
	// public boolean addProducer ()
	// public boolean addCreationDate ()
	// public boolean addHeader (String name, String content)

	public static void main(String[] args) throws Exception {

		// System.out.println("Criando arquivo.");
		//
		// Relatorio ex = new Relatorio();
		//
		// System.out.println("Arquivo criado.");

		System.out.println("Criando relatório.");

		Relatorio rel = new Relatorio(1);
		List<Object[]> lista = new ArrayList<Object[]>();
		Object[] vetor = new Object[3];
		vetor[0] = "Alpha";
		vetor[1] = "Beta";
		vetor[2] = "Gama";
		lista.add(vetor);
		vetor = new Object[3];
		vetor[0] = "mae";
		vetor[1] = "pai";
		vetor[2] = "Filho";
		lista.add(vetor);
		float[] floats =  { 20, 50, 20,20 };
		//rel.construirTabela(lista,floats,"Primeiro", "Segundo", "Terceiro");

		System.out.println("Relatório Criado.");
	}

	public String getTituloRelatorio() {
		return tituloRelatorio;
	}

	public void setTituloRelatorio(String tituloRelatorio) {
		this.tituloRelatorio = tituloRelatorio;
	}
	
	public static Table criarObjetoTabela(boolean usarFontes, float[] headerWidths, int colunas) {
        try {
            Table aTable = new Table(colunas);
            Font fonteCabecalho = new Font(Font.HELVETICA, 13, Font.BOLD);

            aTable.setPadding(1);
            aTable.setSpacing(0);

            aTable.setWidths(headerWidths);

            aTable.widthPercentage();
            aTable.setWidth(100);
            aTable.setBorder(0);

            aTable.setSpaceBetweenCells(0);
           
            aTable.setDefaultCellBorderWidth(0);
            aTable.setBorder(0);
            aTable.setMarkupAttribute("class", "adur-table");

            return aTable;
        } catch (BadElementException e) {
            throw new RuntimeException("Erro definindo largura do cabeçalho", e);
        }
    }
	
}